using System;
using System.Runtime.Serialization;
using System.Collections.Generic;

namespace CoreEx.Samples.DomainModel
{

	/// <summary>
	/// A class that represents Orders.
	/// </summary>
	[Serializable]
	public class Order
	{
		#region Private Members

		private IList<OrderDetail> _orderDetails = new List<OrderDetail>();

		#endregion

		/// <summary>
		/// Gets or sets the Order ID
		/// </summary>
		public virtual int OrderID { get; set; }

		/// <summary>
		/// Gets or sets the Order Date
		/// </summary>
		public virtual DateTime? OrderDate { get; set; }

		/// <summary>
		/// Gets or sets the Required Date
		/// </summary>
		public virtual DateTime? RequiredDate { get; set; }

		/// <summary>
		/// Gets or sets the Shipped Date
		/// </summary>
		public virtual DateTime? ShippedDate { get; set; }

		/// <summary>
		/// Gets or sets the Freight
		/// </summary>
		public virtual decimal? Freight { get; set; }

		/// <summary>
		/// Gets or sets the Ship Name
		/// </summary>
		public virtual string ShipName { get; set; }

		/// <summary>
		/// Gets or sets the Ship Address
		/// </summary>
		public virtual string ShipAddress { get; set; }

		/// <summary>
		/// Gets or sets the Ship City
		/// </summary>
		public virtual string ShipCity { get; set; }

		/// <summary>
		/// Gets or sets the Ship Region
		/// </summary>
		public virtual string ShipRegion { get; set; }

		/// <summary>
		/// Gets or sets the Ship Postal Code
		/// </summary>
		public virtual string ShipPostalCode { get; set; }

		/// <summary>
		/// Gets or sets the Ship Country
		/// </summary>
		public virtual string ShipCountry { get; set; }

		/// <summary>
		/// Gets the Order Details
		/// </summary>
		public IList<OrderDetail> OrderDetails 
		{
			get { return _orderDetails; }
		}

		/// <summary>
		/// Gets or sets the Customer
		/// </summary>
		public virtual Customer Customer { get; set;}

		/// <summary>
		/// Gets or sets the Employee
		/// </summary>
		public virtual Employee Employee { get; set;}

		/// <summary>
		/// Gets or sets the Shipper
		/// </summary>
		public virtual Shipper Shipper { get; set;}


	}
}
